﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Sigecov.Models;
using System.Linq;
namespace Sigecov.Formularios
{
    public partial class FrmFuncionario : Sigecov.Formularios.FrmBase
    {
        public FrmFuncionario()
        {
            InitializeComponent();
        }

        public int _idFuncionario = 0;
        private void btnSair_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Ferramenta.ResetarControles(this.Controls);
            txtUsuario.Clear();
            txtSenha.Clear();
            cbxAcesso.SelectedIndex = 0;
            rdbUsuarioSistemaNao_CheckedChanged(sender, e);
            rdbUsuarioSistemaNao.Checked = true;
        }

        private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "DELETAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        DialogResult confirmar = MessageBox.Show("Deseja deletar o funcionário "+txtNome.Text.ToUpper()+" "+ txtSobrenome.Text.ToUpper()+"?", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                        if (confirmar.ToString().ToUpper() == "YES")
                        {
                            Usuario usuario = new Usuario();
                            //BUSCA OS DADOS DO FUNCIONARIO E SEU RESPECTIVO USUARIO
                            Funcionario funcionario = DB.Funcionarios.Find(_idAcao);
                            var usuarios = DB.Usuarios.Select(u=> new {u.usuId,u.funId}).Where(u=> u.funId == _idAcao);
                            foreach(var item in usuarios)
                                usuario = DB.Usuarios.Find(item.usuId);
                            if (usuario != null && usuario.usuId != 0)//SE O FUNCIONARIO É USUÁRIO DO SITEMA DELETA O USUARIO DEPOIS O FUNCIONARIO
                            {
                                usuario.Deletar(usuario, DB);
                                funcionario.Deletar(funcionario, DB);
                            }
                            else//SENAO DELETA SOMENTE O FUNCIONARIO
                                funcionario.Deletar(funcionario, DB);

                            MessageBox.Show("Funcionário deletado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            Close();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao deletar o funcionário!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnDeletar.Focus();
                    }
                }
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (_tipoOperacao == "INCLUIR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Funcionario funcionario = new Funcionario();
                        Usuario usuario = new Usuario();

                        if (!
                            ((string.IsNullOrWhiteSpace(txtBairro.Text))
                            || (string.IsNullOrWhiteSpace(txtCargo.Text))
                            || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                            || (string.IsNullOrWhiteSpace(txtNome.Text))
                            || (string.IsNullOrWhiteSpace(txtNumero.Text))
                            || (string.IsNullOrWhiteSpace(txtSobrenome.Text)
                            || (string.IsNullOrWhiteSpace(txtCep.Text))))
                            )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                var funcionarios = DB.Funcionarios.Where(f => f.funNome == txtNome.Text);
                                if (funcionarios.Count() == 0)
                                {
                                    if (rdbUsuarioSistemaNao.Checked)
                                    {
                                        funcionario.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                        funcionario.funBairro = txtBairro.Text;
                                        funcionario.funCargo = txtCargo.Text;
                                        funcionario.funCep = txtCep.Text;
                                        funcionario.funComplemento = txtComplemento.Text;
                                        funcionario.funDataContratacao = Convert.ToDateTime(dtpDataContratacao.Text);
                                        funcionario.funDataNascimento = Convert.ToDateTime(dtpDataNascimento.Text);
                                        funcionario.funLogradouro = txtLogradouro.Text;
                                        funcionario.funNome = txtNome.Text;
                                        funcionario.funNumero = Convert.ToInt32(txtNumero.Text);
                                        funcionario.funObservacoes = rtbObservacoes.Text;
                                        if (string.IsNullOrEmpty(txtRamal.Text))
                                            funcionario.funRamal = 0;
                                        else
                                            funcionario.funRamal = Convert.ToInt32(txtRamal.Text);
                                        funcionario.funSobrenome = txtSobrenome.Text;
                                        funcionario.funTelefone = mtbTelefone.Text;
                                        funcionario.funTipoLogradouro = cbxTipoLogradouro.Text;
                                        funcionario.supId = Convert.ToInt32(cbxSupervisor.SelectedValue);

                                        funcionario.Cadastrar(funcionario, DB);

                                        MessageBox.Show("Funcionário cadastrado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        Ferramenta.ResetarControles(this.Controls);
                                        txtUsuario.Clear();
                                        txtSenha.Clear();
                                        cbxAcesso.SelectedIndex = 0;
                                        rdbUsuarioSistemaNao_CheckedChanged(sender, e);
                                        rdbUsuarioSistemaNao.Checked = true;
                                        txtNome.Focus();
                                    }
                                    else
                                    {
                                        if (!((string.IsNullOrWhiteSpace(txtUsuario.Text)) || (string.IsNullOrWhiteSpace(txtSenha.Text))))
                                        {
                                             var usuarios = DB.Usuarios.Where(u=> u.usuLogin== txtUsuario.Text);
                                             if (usuarios.Count() == 0)
                                             {
                                                 funcionario.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                                 funcionario.funBairro = txtBairro.Text;
                                                 funcionario.funCargo = txtCargo.Text;
                                                 funcionario.funCep = txtCep.Text;
                                                 funcionario.funComplemento = txtComplemento.Text;
                                                 funcionario.funDataContratacao = Convert.ToDateTime(dtpDataContratacao.Text);
                                                 funcionario.funDataNascimento = Convert.ToDateTime(dtpDataNascimento.Text);
                                                 funcionario.funLogradouro = txtLogradouro.Text;
                                                 funcionario.funNome = txtNome.Text;
                                                 funcionario.funNumero = Convert.ToInt32(txtNumero.Text);
                                                 funcionario.funObservacoes = rtbObservacoes.Text;
                                                 if (string.IsNullOrEmpty(txtRamal.Text))
                                                     funcionario.funRamal = 0;
                                                 else
                                                     funcionario.funRamal = Convert.ToInt32(txtRamal.Text);
                                                 funcionario.funSobrenome = txtSobrenome.Text;
                                                 funcionario.funTelefone = mtbTelefone.Text;
                                                 funcionario.funTipoLogradouro = cbxTipoLogradouro.Text;
                                                 funcionario.supId = Convert.ToInt32(cbxSupervisor.SelectedValue);

                                                 funcionario.Cadastrar(funcionario, DB);

                                                 var sql = DB.Funcionarios.OrderByDescending(f => f.funId).First();
                                                 _idFuncionario = sql.funId;

                                                 usuario.funId = _idFuncionario;
                                                 usuario.usuLogin = txtUsuario.Text;
                                                 usuario.usuSenha = txtSenha.Text;
                                                 if (cbxAcesso.Text == "Administrativo")
                                                     usuario.usuTipoAcesso = "A";
                                                 else
                                                     usuario.usuTipoAcesso = "G";

                                                 usuario.Cadastrar(usuario, DB);

                                                 MessageBox.Show("Funcionário cadastrado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                                 Ferramenta.ResetarControles(this.Controls);
                                                 txtUsuario.Clear();
                                                 txtSenha.Clear();
                                                 cbxAcesso.SelectedIndex = 0;
                                                 rdbUsuarioSistemaNao_CheckedChanged(sender, e);
                                                 rdbUsuarioSistemaNao.Checked = true;
                                                 txtNome.Focus();
                                             }
                                             else
                                             {
                                                 MessageBox.Show("Esse usuário já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                                 txtUsuario.Clear();
                                                 txtUsuario.Focus();
                                             }
                                        }
                                        else
                                        {
                                            MessageBox.Show("Informe os dados do usuário!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                            txtUsuario.Focus();
                                        }
                                    }
                                }
                                else
                                {
                                    MessageBox.Show("Esse funcionário já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                    txtNome.Clear();
                                    txtNome.Focus();
                                }
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtNome.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao inserir o funcionário!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        btnSalvar.Focus();
                    }
                }
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                using (SigecovContext DB = new SigecovContext())
                {
                    try
                    {
                        Funcionario funcionario = new Funcionario();
                        Usuario usuario = new Usuario();
                        funcionario = DB.Funcionarios.Find(_idAcao);
                        usuario = DB.Usuarios.Find(_idAcao);
                        if (!
                            (string.IsNullOrWhiteSpace(txtBairro.Text))
                            || (string.IsNullOrWhiteSpace(txtCargo.Text))
                            || (string.IsNullOrWhiteSpace(txtLogradouro.Text))
                            || (string.IsNullOrWhiteSpace(txtNome.Text))
                            || (string.IsNullOrWhiteSpace(txtNumero.Text))
                            || (string.IsNullOrWhiteSpace(txtSobrenome.Text)
                            || (string.IsNullOrWhiteSpace(txtCep.Text)))
                            )
                        {
                            if (cbxCidade.SelectedItem != null)
                            {
                                if (rdbUsuarioSistemaNao.Checked)
                                {
                                    funcionario.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                    funcionario.funBairro = txtBairro.Text;
                                    funcionario.funCargo = txtCargo.Text;
                                    funcionario.funCep = txtCep.Text;
                                    funcionario.funComplemento = txtComplemento.Text;
                                    funcionario.funDataContratacao = Convert.ToDateTime(dtpDataContratacao.Text);
                                    funcionario.funDataNascimento = Convert.ToDateTime(dtpDataNascimento.Text);
                                    funcionario.funLogradouro = txtLogradouro.Text;
                                    funcionario.funNome = txtNome.Text;
                                    funcionario.funNumero = Convert.ToInt32(txtNumero.Text);
                                    funcionario.funObservacoes = rtbObservacoes.Text;
                                    if (string.IsNullOrEmpty(txtRamal.Text))
                                        funcionario.funRamal = 0;
                                    else
                                        funcionario.funRamal = Convert.ToInt32(txtRamal.Text);
                                    funcionario.funSobrenome = txtSobrenome.Text;
                                    funcionario.funTelefone = mtbTelefone.Text;
                                    funcionario.funTipoLogradouro = cbxTipoLogradouro.Text;
                                    funcionario.supId = Convert.ToInt32(cbxSupervisor.SelectedValue);

                                    funcionario.Alterar(funcionario, DB);

                                    if (usuario != null)
                                        usuario.Deletar(usuario, DB);

                                    MessageBox.Show("Funcionário alterado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Ferramenta.ResetarControles(this.Controls);
                                    txtUsuario.Clear();
                                    txtSenha.Clear();
                                    cbxAcesso.SelectedIndex = 0;
                                    rdbUsuarioSistemaNao_CheckedChanged(sender, e);
                                    rdbUsuarioSistemaNao.Checked = true;
                                    Close();
                                }
                                else
                                {
                                    if (!(string.IsNullOrWhiteSpace(txtUsuario.Text)))
                                    {
                                        var usuarios = DB.Usuarios.Where(u=> u.usuLogin== txtUsuario.Text);
                                        if (usuarios.Count() == 0)
                                        {
                                            funcionario.cidId = Convert.ToInt32(cbxCidade.SelectedValue);
                                            funcionario.funBairro = txtBairro.Text;
                                            funcionario.funCargo = txtCargo.Text;
                                            funcionario.funCep = txtCep.Text;
                                            funcionario.funComplemento = txtComplemento.Text;
                                            funcionario.funDataContratacao = Convert.ToDateTime(dtpDataContratacao.Text);
                                            funcionario.funDataNascimento = Convert.ToDateTime(dtpDataNascimento.Text);
                                            funcionario.funLogradouro = txtLogradouro.Text;
                                            funcionario.funNome = txtNome.Text;
                                            funcionario.funNumero = Convert.ToInt32(txtNumero.Text);
                                            funcionario.funObservacoes = rtbObservacoes.Text;
                                            if (string.IsNullOrEmpty(txtRamal.Text))
                                                funcionario.funRamal = 0;
                                            else
                                                funcionario.funRamal = Convert.ToInt32(txtRamal.Text);
                                            funcionario.funSobrenome = txtSobrenome.Text;
                                            funcionario.funTelefone = mtbTelefone.Text;
                                            funcionario.funTipoLogradouro = cbxTipoLogradouro.Text;
                                            funcionario.supId = Convert.ToInt32(cbxSupervisor.SelectedValue);

                                            funcionario.Alterar(funcionario, DB);

                                            if (usuario == null)
                                            {
                                                Usuario novoUsuario = new Usuario();
                                                novoUsuario.funId = funcionario.funId;
                                                novoUsuario.usuLogin = txtUsuario.Text;
                                                novoUsuario.usuSenha = txtSenha.Text;
                                                if (cbxAcesso.Text == "Administrativo")
                                                    novoUsuario.usuTipoAcesso = "A";
                                                else
                                                    novoUsuario.usuTipoAcesso = "G";

                                                novoUsuario.Cadastrar(novoUsuario, DB);
                                            }
                                            else
                                            {
                                                usuario.usuLogin = txtUsuario.Text;
                                                if (!(string.IsNullOrWhiteSpace(txtSenha.Text)))
                                                    usuario.usuSenha = txtSenha.Text;
                                                if (cbxAcesso.Text == "Administrativo")
                                                    usuario.usuTipoAcesso = "A";
                                                else
                                                    usuario.usuTipoAcesso = "G";

                                                usuario.Alterar(usuario, DB);
                                            }

                                            MessageBox.Show("Funcionário alterado com sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                            Ferramenta.ResetarControles(this.Controls);
                                            txtUsuario.Clear();
                                            txtSenha.Clear();
                                            cbxAcesso.SelectedIndex = 0;
                                            rdbUsuarioSistemaNao_CheckedChanged(sender, e);
                                            rdbUsuarioSistemaNao.Checked = true;
                                            Close();
                                        }
                                        else
                                        {
                                            MessageBox.Show("Esse usuário já está cadastrado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                            txtUsuario.Clear();
                                            txtUsuario.Focus();
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("Informe os dados do usuário!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                        txtUsuario.Focus();
                                    }
                                }
                            }
                            else
                            {
                                MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                cbxEstado.Focus();
                            }
                        }
                        else
                        {
                            MessageBox.Show("Por favor informe todos os campos obrigatórios!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            cbxEstado.Focus();
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Falha ao alterar o funcionário!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtNome.Focus();
                    }
                }
            }
        }

        private void FrmFuncionario_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'dsSigecov.Paises' table. You can move, or remove it, as needed.
            this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
            cbxSupervisor.DataSource = Supervisor.ListarSupervisor();
            cbxSupervisor.DisplayMember = "supNome";
            cbxSupervisor.ValueMember = "supId";
            this.AcaoIncluir();
            if (_tipoOperacao == "INCLUIR")
            {
                this.lblTituloAcao.Text = "Cadastrar Funcionário";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                Ferramenta.ResetarControles(this.Controls);
                rdbUsuarioSistemaNao_CheckedChanged(sender, e);
                this.AcaoIncluir();
            }
            else if (_tipoOperacao == "ALTERAR")
            {
                this.lblTituloAcao.Text = "Alterar Funcionário";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.AcaoAlterar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Funcionario funcionario = DB.Funcionarios.Find(_idAcao);

                    txtBairro.Text = funcionario.funBairro;
                    txtCargo.Text = funcionario.funCargo;
                    txtComplemento.Text = funcionario.funComplemento;
                    txtLogradouro.Text = funcionario.funLogradouro;
                    txtNome.Text = funcionario.funNome;
                    txtNumero.Text = funcionario.funNumero.ToString();
                    txtRamal.Text = funcionario.funRamal.ToString();
                    txtSobrenome.Text = funcionario.funSobrenome;
                    txtCep.Text = funcionario.funCep;
                    mtbTelefone.Text = funcionario.funTelefone;
                    cbxTipoLogradouro.SelectedItem = funcionario.funTipoLogradouro;
                    cbxPais.SelectedValue = funcionario.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = funcionario.Cidade.estId;
                    cbxCidade.SelectedValue = funcionario.Cidade.cidId;
                    dtpDataNascimento.Text = funcionario.funDataNascimento.ToString();
                    dtpDataContratacao.Text = funcionario.funDataContratacao.ToString();
                    rtbObservacoes.Text = funcionario.funObservacoes;

                    Usuario usuario = DB.Usuarios.Find(_idAcao);
                    if (usuario != null)
                    {
                        rdbUsuarioSistemaSim.Checked = true;
                        txtUsuario.Text = usuario.usuLogin;
                        txtSenha.Text = "";
                        if (usuario.usuTipoAcesso == "A")
                            cbxAcesso.SelectedItem = "Administrativo";
                        else
                            cbxAcesso.SelectedItem = "Gerencial";
                    }
                    else
                        rdbUsuarioSistemaNao.Checked = true;
                    Supervisor supervisor = DB.Supervisors.Find(_idAcao);
                    cbxSupervisor.SelectedValue = supervisor.supId;

                }
            }
            else if (_tipoOperacao == "DELETAR")
            {
                this.lblTituloAcao.Text = "Deletar Funcionário";
                this.paisesTableAdapter.Fill(this.dsSigecov.Paises);
                cbxPais_SelectedIndexChanged(sender, e);
                this.AcaoDeletar();
                using (SigecovContext DB = new SigecovContext())
                {
                    Funcionario funcionario = DB.Funcionarios.Find(_idAcao);

                    txtBairro.Text = funcionario.funBairro;
                    txtCargo.Text = funcionario.funCargo;
                    txtComplemento.Text = funcionario.funComplemento;
                    txtLogradouro.Text = funcionario.funLogradouro;
                    txtNome.Text = funcionario.funNome;
                    txtNumero.Text = funcionario.funNumero.ToString();
                    txtRamal.Text = funcionario.funRamal.ToString();
                    txtSobrenome.Text = funcionario.funSobrenome;
                    txtCep.Text = funcionario.funCep;
                    mtbTelefone.Text = funcionario.funTelefone;
                    cbxTipoLogradouro.SelectedItem = funcionario.funTipoLogradouro;
                    cbxPais.SelectedValue = funcionario.Cidade.Estado.Pais.paiId;
                    cbxEstado.SelectedValue = funcionario.Cidade.estId;
                    cbxCidade.SelectedValue = funcionario.Cidade.cidId;
                    dtpDataNascimento.Text = funcionario.funDataNascimento.ToString();
                    dtpDataContratacao.Text = funcionario.funDataContratacao.ToString();
                    rtbObservacoes.Text = funcionario.funObservacoes;

                    Usuario usuario = DB.Usuarios.Find(_idAcao);
                    if (usuario != null)
                    {
                        rdbUsuarioSistemaSim.Checked = true;
                        txtUsuario.Text = usuario.usuLogin;
                        txtSenha.Text = "";
                        if (usuario.usuTipoAcesso == "A")
                            cbxAcesso.SelectedItem = "Administrativo";
                        else
                            cbxAcesso.SelectedItem = "Gerencial";
                    }
                    else
                        rdbUsuarioSistemaNao.Checked = true;
                    Supervisor supervisor = DB.Supervisors.Find(_idAcao);
                    Ferramenta.DesativarControles(this.Controls);
                    cbxSupervisor.SelectedValue = supervisor.supId;

                    
                }
            }
        }
        #region Validação do Usuário
        private void ValidarUsuarioSistema(string isUsuario){
            if (isUsuario == "SIM")
            {
                lblUsuario.Visible = true;
                lblSenha.Visible = true;
                lblAcesso.Visible = true;
                txtUsuario.Visible = true;
                txtSenha.Visible = true;
                cbxAcesso.Visible = true;
                cbxAcesso.SelectedIndex = 0;
                grbDadosUsuario.Height = 157;
            }
            else
            {
                lblUsuario.Visible = false;
                lblSenha.Visible = false;
                lblAcesso.Visible = false;
                txtUsuario.Visible = false;
                txtSenha.Visible = false;
                cbxAcesso.Visible = false;
                grbDadosUsuario.Height = 52;
            }
        }
        #endregion
        private void rdbUsuarioSistemaSim_CheckedChanged(object sender, EventArgs e)
        {
            ValidarUsuarioSistema("SIM");
        }

        private void rdbUsuarioSistemaNao_CheckedChanged(object sender, EventArgs e)
        {
            ValidarUsuarioSistema("NÃO");
        }

        private void cbxPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            cbxEstado.DataSource = Estado.ListarEstado(Convert.ToInt32(cbxPais.SelectedValue));
            cbxEstado.DisplayMember = "estNome";
            cbxEstado.ValueMember = "estId";
        }
        private void cbxEstado_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            cbxCidade.DataSource = Cidade.ListarCidade(Convert.ToInt32(cbxEstado.SelectedValue));
            cbxCidade.DisplayMember = "cidNome";
            cbxCidade.ValueMember = "cidId";
        }

        private void txtCep_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbxPais.Text == "Brasil")
            {
                txtCep.MaxLength = 8;
                Ferramenta.SomenteNumero(e);
            }
            else
                txtCep.MaxLength = 10;
        }

        private void txtNumero_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void txtRamal_KeyPress(object sender, KeyPressEventArgs e)
        {
            Ferramenta.SomenteNumero(e);
        }

        private void btnPesquisarCep_Click(object sender, EventArgs e)
        {
            bool existeConexao = Ferramenta.VerificarConexaoInternet();
            bool enderecoEncontrado = false;
            bool problemaConexao = false;
            string mensagemConexao = "";
            if (existeConexao)
            {
                if (cbxPais.Text == "Brasil")
                {
                    Dictionary<string, string> endereco = Ferramenta.BuscarCep(txtCep.Text);

                    foreach (var item in endereco)
                    {
                        if (item.Key == "conexao")
                        {
                            mensagemConexao = item.Value;
                            problemaConexao = true;

                        }
                        if (item.Key == "logradouro")
                        {
                            if (item.Value == "")
                                enderecoEncontrado = false;
                            else
                                enderecoEncontrado = true;
                        }
                    }
                    if (!(problemaConexao))
                    {
                        if (enderecoEncontrado)
                        {
                            foreach (var item in endereco)
                            {
                                if (item.Key == "tipoLogradouro")
                                    cbxTipoLogradouro.SelectedItem = item.Value;
                                else if (item.Key == "logradouro")
                                    txtLogradouro.Text = item.Value;
                                else if (item.Key == "bairro")
                                    txtBairro.Text = item.Value;
                                else if (item.Key == "cidade")
                                {
                                    cbxCidade.Items.Add(item.Value);
                                    cbxCidade.SelectedItem = item.Value;
                                }
                                else
                                {
                                    cbxEstado.Text = item.Value;
                                    cbxEstado.SelectedItem = item.Value;
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Endereço não encontrado com o cep informado!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtCep.Focus();
                        }
                    }
                    else
                    {
                        MessageBox.Show(mensagemConexao, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtCep.Focus();
                    }
                }
                else
                {
                    MessageBox.Show("A busca de cep só funciona para os estados brasileiros!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtCep.Focus();
                }
            }
            else
            {
                MessageBox.Show("Sem conexão com internet!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtCep.Focus();
            }
        }
    }
}
